package main

import (
	"strconv"
)

// 788. 旋转数字
// 我们称一个数 X 为好数, 如果它的每位数字逐个地被旋转 180 度后，
// 我们仍可以得到一个有效的，且和 X 不同的数。要求每位数字都要被旋转。

// 如果一个数的每位数字被旋转以后仍然还是一个数字， 则这个数是有效的。
// 0, 1, 和 8 被旋转后仍然是它们自己；2 和 5 可以互相旋转成对方
// （在这种情况下，它们以不同的方向旋转，换句话说，2 和 5 互为镜像）；6 和 9 同理，
// 除了这些以外其他的数字旋转以后都不再是有效的数字。

// 现在我们有一个正整数 N, 计算从 1 到 N 中有多少个数 X 是好数？

func rotateDigits(n int) int {
	// m := map[int]int{2:5,5:2,6:9,9:6,0:0,8:8,1:1}

	// 旋转
	check := []int{0, 0, 1, -1, -1, 1, 1, -1, 0, 1} // 0-9

	// 所以，数字不能是3，4，7
	// 至少有一次2 5 6 9
	var ans int
	for i := 1; i <= n; i++ {
		valid, diff := true, false // valid 满足条件1  diff 条件2
		for _, ch := range strconv.Itoa(i) {
			if check[ch-'0'] == -1 {
				valid = false
			} else if check[ch-'0'] == 1 {
				diff = true
			}
		}
		if valid && diff {
			ans++
		}
	}
	return ans
}
